package com.hdd.hll.quartz.trigger;

import com.hdd.hll.common.utils.DateTimeUtil;
import com.hdd.hll.quartz.entity.TriggerInfo;
import lombok.extern.slf4j.Slf4j;
import org.quartz.*;
import org.springframework.stereotype.Component;

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

/**
 * 触发器
 *
 * @author jw
 */
@Component
@Slf4j
public class CustomTrigger {
    /**
     * 创建触发器
     */
    public Trigger build(TriggerInfo triggerInfo) {
        return TriggerBuilder.newTrigger()
                // 每个触发器的唯一标识
                .withIdentity(triggerInfo.getName(), triggerInfo.getGroup())
                // 3分钟后开始
                .startAt(startTime())
                .withSchedule(SimpleScheduleBuilder
                        .simpleSchedule()
                        // 每次间隔3分钟
                        .withIntervalInSeconds(3)
                        // 重复4次，包含触发的一次，共计5次
                        .withRepeatCount(4))
                .build();
    }

    /**
     * Job开始执行时间
     *  接口请求的当前时间为准，向后推3分钟开始执行
     *
     * @return job执行时间
     */
    private Date startTime() {
        try {
            return DateFormat.getDateTimeInstance().parse(DateTimeUtil.getAfterMinutes(DateTimeUtil.getCurrentDateTime(), 1));
        } catch (ParseException e) {
            log.error("获取cron时间字符串失败, {}", e.getMessage());
            return null;
        }
    }
}
